package org.boot.easyapi.properties;

import lombok.Data;
import org.boot.easyapi.util.spring.SpringUtil;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * easyapi 配置类
 */
@Data
@ConfigurationProperties(prefix = "easyapi")
public class EasyApiProperties {
    /** table 配置块 */
    private Table table = new Table();

    /** api 配置块 */
    private Api api = new Api();

    /** file 配置块 */
    private File file = new File();

    /** web 配置块 */
    private Web web = new Web();

    /** logger 配置块 */
    private Logger logger = new Logger();

    /* ---------- 内嵌静态类 ---------- */

    @Data
    public static class Table {
        private App app = new App();
    }

    /** app 配置块 */
    @Data
    public static class App {
        /** 表前缀（已弃用，保留字段防止升级报错） */
        private String prefix;
        /** ID 生成策略 */
        private IdGenerator idGenerator = IdGenerator.ID_AUTO;
        /** 是否开启逻辑删除 */
        private boolean deletedLogic = true;

        public enum IdGenerator {
            /** 雪花 14 位 */
            ID_AUTO,
            /** 其他扩展 */
            ID_SNOWFLAKE_8910,
            ID_SNOWFLAKE_14
        }
    }

    /** api 配置块 */
    @Data
    public static class Api {
        /** 是否强制驼峰 */
        private boolean onlyCamelCase = true;
        /** 是否强制使用 RespVO */
        private boolean onlyResponseVo = false;
        /** 是否开启多租户 */
        private boolean tenantEnable = false;
    }

    /** file 配置块 */
    @Data
    public static class File {
        private Storage storage = new Storage();
    }

    @Data
    public static class Storage {
        /** 上传分片大小，默认 1MB */
        private int chunkSize = 1048576;
        /** 是否计算 md5 */
        private boolean enableMd5 = true;
        /** 根路径（如启用，可放开注释） */
        private String rootPath;
    }

    /** web 配置块 */
    @Data
    public static class Web {
        private Permission permission = new Permission();
    }

    /** permission 配置块 */
    @Data
    public static class Permission {
        /** 是否开启 IP 权限控制 */
        private boolean ipEnabled = false;
        /** 是否开启用户权限控制 */
        private boolean userEnabled = false;
    }

    /** logger 配置块 */
    @Data
    public static class Logger {
        /** 是否打印 easyapi 日志 */
        private boolean enabled = true;
    }

    //获取所有配置信息
    public static EasyApiProperties properties() {
        return SpringUtil.getBean(EasyApiProperties.class);
    }
}
